s = "abcc,ccEDf"
print(s.lower())  # 全部转化为小写
print(s.upper())  # 全部转化为大写
print(s.capitalize())  # 首字母大写，其余字母小写
print(s.casefold())  # 英语环境等同lower(),其他西文中更通用，比如法语等，还有其他一些特殊字符

print(s.center(20, '*'))  # 设置字符串宽度为20，同时字符串居中，其余*填充（默认为空格）
print(s.count('cc', 1, 5))  # 统计字符串cc出现的次数

print(s.startswith('ab'))  # 判断是否以ab开头
print(s.endswith('EDf'))  # 判断是否以EDf结尾

# 截取字符串
print(s[1: 5])
print(s[-5:])

# 占位符
placholder = '我是{name}，年龄{age}'
print(placholder.format(name='小小兔', age=5))
print(placholder.format_map({'name': '小小兔', 'age': 5}))

# 占位符
placholder1 = '我是{0}，年龄{1}'
print(placholder1.format('顾小兔', 30))

# 查找和索引
print(s.find('c'))  # 查找字符位置，找不到返回-1
print(s.index('c'))  # 查找字符位置，找不到报错substring not found

alphanumeric = 'user12345'
print(alphanumeric.isalnum())  # 字符串中只包含字母或数字，alphanumeric
print('123'.isdecimal())  # 字符串中只包含十进制数字，计算用的最多
print('特殊字符②', '②'.isdigit())  # 类似casefold()，比isdecimal()更通用
print('罗马数字Ⅱ', 'Ⅱ'.isnumeric())  # 字符串中只包含数字，可以判断罗马数字,汉字数字。最通用
print('中文二', '二'.isnumeric())  # 字符串中只包含数字，可以判断罗马数字,汉字数字。最通用
print('xdb'.isalpha())  # 字符串中只包含字母

print('user1'.join(['abc', '123']))  # 字符串批量拼接

# 每个制表符之前子字符串每次20位分割，不够空格填充。可以制作类似表格的效果，默认值8位分割
tabs = '用户名\t密码\t邮箱\nguxiaotu\t3935905\t12345@qq.com\nxiaoxiaotu\t123456\tdfafdfd@qq.com'
print(tabs.expandtabs(20))

# 标识符是否符合规则
print('标识符是否符合规则', '_12x'.isidentifier())

# 转义字符无法打印
print('转义字符能否打印', 'x\t\n'.isprintable())

# 判断字符串是否是否全部空格
print('判断字符串是否是一个或多个空格:', ' '.isspace())

# 判断字符串是否为空字符串或者空对象
s1 = ''
if s1 is None or s1 == '':
    print('s1字符串为空!')

# 测试title，每个单词首字母大写
s2 = 'I am Gu xiao tu'
print(s2.title())
print(s2.istitle())

# 空格、制表符或者其他样式格式化每个字符
style = '*'
print(style.join('我是顾小图'))

# 用制定字符填充字符串长度,left字符串在左侧，right字符串在右侧
print('我是小小兔'.ljust(10, "-"))
print('我是小小兔'.rjust(10, "-"))

# 判断是否大小写
s3 = 'dDcfdF'
print(s3.lower().islower())
print(s3.upper().isupper())

# 清除字符串空格、\t、\r、\n
s4 = '   \t\n\rguiaotu  '
print(s4.lstrip())
print(s4.rstrip())
print(s4.strip())

# 特殊用法，清除制定字符串(KMP字符串匹配)，也就是清除最长公共子串
print('xxguxiaotu'.lstrip('xxu'))  # 输出guxiaotu
print('xxguxiaotu'.rstrip('xxu'))  # 输出xxguxiaot,不是从将字符串倒序匹配，而是从右开始每次截取最长子串匹配
print('xxguxiaotu'.strip('xxu'))  # 输出guxiaot
print('xalex'.rstrip('9lexexx'))  # xa

# 字符串分割后变为list类型，元素为str类型
print(s.split(','))

# 字符串替换
print('字符"c"替换为"a"：', s.replace('c', 'a'))

# 可以批量字符串替换
trans = str.maketrans('顾小兔', '小小兔')
print('顾小兔今年毕业！'.translate(trans))
